21397
23381
As respostas a esta pergunta são um esforço da comunidade. Edite as respostas existentes para melhorar esta postagem. Atualmente não está aceitando novas respostas ou interações.
Escrevi a coisa errada em uma mensagem de confirmação.
Como posso mudar a mensagem? O commit ainda não foi enviado. 
Corrigindo a mensagem de confirmação mais recente
git commit --amend
irá abrir seu editor, permitindo que você altere a mensagem de commit do commit mais recente. Além disso, você pode definir a mensagem de confirmação diretamente na linha de comando com:
git commit --amend -m "Nova mensagem de commit"
... no entanto, isso pode tornar as mensagens de confirmação de várias linhas ou pequenas correções mais difíceis de inserir.
Certifique-se de não ter nenhuma mudança na cópia de trabalho preparada antes de fazer isso ou elas também serão confirmadas. (Mudanças não planejadas não serão confirmadas.)
Mudando a mensagem de um commit que você já enviou para o seu branch remoto
Se você já enviou seu commit para seu branch remoto, então - depois de corrigir seu commit localmente (como descrito acima) - você também precisará forçar o envio de commit com:
git push   --force
# Ou
git push   -f
Aviso: force-push sobrescreverá o branch remoto com o estado do seu local. Se houver commits no branch remoto que você não tem em seu branch local, você perderá esses commits.
Aviso: seja cauteloso ao alterar commits que você já compartilhou com outras pessoas. Corrigir commits essencialmente os reescreve para ter diferentes SHA IDs, o que representa um problema se outras pessoas têm cópias do commit antigo que você reescreveu. Qualquer um que tenha uma cópia do commit antigo precisará sincronizar seu trabalho com o seu commit reescrito, o que às vezes pode ser difícil, então certifique-se de coordenar com outras pessoas ao tentar reescrever o histórico de commit compartilhado, ou apenas evite reescrever commits compartilhados completamente.
Execute um rebase interativo
Outra opção é usar rebase interativo.
Isso permite que você edite qualquer mensagem que deseja atualizar, mesmo se não for a mensagem mais recente.
Para fazer um squash Git, siga estes passos:
// n é o número de commits até o último commit que você deseja editar
git rebase -i HEAD ~ n
Depois de reprimir seus commits - escolha o e / r para editar a mensagem:
Observação importante sobre rebase interativo
Quando você usa git rebase -i HEAD ~ n, pode haver mais de n commits. O Git irá "coletar" todos os commits nos últimos n commits, e se houver uma fusão em algum lugar entre esse intervalo, você verá todos os commits também, então o resultado será n +.
Boa dica:
Se você tiver que fazer isso para mais de um branch e você pode enfrentar conflitos ao alterar o conteúdo, configure git reerere e deixe Git resolver esses conflitos automaticamente para você.
Documentação
git-commit (1) Página do manual
Página do manual git-rebase (1)
git-push (1) Página manual
|
git commit --amend -m "sua nova mensagem"
|
Se o commit que você deseja corrigir não for o mais recente:
git rebase --interactive $ parent_of_flawed_commit
Se você quiser consertar vários commits falhos, passe o pai do mais velho deles.
Um editor aparecerá, com uma lista de todos os commits desde o que você deu.
Altere pick para reescrever (ou em versões antigas do Git, para editar) na frente de qualquer commit que você deseja corrigir.
Depois de salvar, o Git irá reproduzir os commits listados.
Para cada commit que você deseja reescrever, o Git o levará de volta ao seu editor. Para cada commit que você deseja editar, o Git o coloca no shell. Se você estiver no shell:
Altere o commit da maneira que desejar.
git commit --amend
git rebase --continue
A maior parte dessa sequência será explicada pela saída dos vários comandos conforme você avança. É muito fácil; você não precisa memorizá-lo - apenas lembre-se de que git rebase --interactive permite que você corrija os commits não importa há quanto tempo eles foram.
Note que você não vai querer mudar os commits que você já enviou. Ou talvez você queira, mas nesse caso você terá que tomar muito cuidado para se comunicar com todos que podem ter retirado seus commits e feito um trabalho em cima deles. Como faço para recuperar / sincronizar novamente após alguém enviar um rebase ou uma redefinição para um branch publicado?
|
Para corrigir o commit anterior, faça as mudanças que você deseja e prepare essas mudanças, e então execute
git commit --amend
Isso abrirá um arquivo em seu editor de texto representando sua nova mensagem de confirmação. Ele começa preenchido com o texto de sua mensagem de confirmação antiga. Altere a mensagem de confirmação como quiser, depois salve o arquivo e feche o editor para terminar.
Para corrigir o commit anterior e manter a mesma mensagem de log, execute
git commit --amend -C HEAD
Para corrigir o commit anterior removendo-o inteiramente, execute
git reset --hard HEAD ^
Se você quiser editar mais de uma mensagem de confirmação, execute
git rebase -i HEAD ~ commit_count
(Substitua commit_count pelo número de commits que você deseja editar.) Este comando inicia seu editor. Marque o primeiro commit (aquele que você deseja alterar) como “edit” ao invés de “pick”, então salve e saia do seu editor. Faça a mudança que deseja confirmar e execute
git commit --amend
git rebase --continue
Nota: Você também pode "Faça a mudança que desejar" no editor aberto por git commit --amend
|
Como jámencionado, git commit --amend é a maneira de sobrescrever o último commit. Uma observação: se você também quiser sobrescrever os arquivos, o comando seria
git commit -a --amend -m "Minha nova mensagem de commit"
|
Você também pode usar git filter-branch para isso.
git filter-branch -f --msg-filter "sed 's / errror / error /'" $ flawed_commit..HEAD
Não é tão fácil quanto um git commit trivial --amend, mas é especialmente útil, se você já tiver alguns merges após sua mensagem de commit errônea.
Note que isto tentará reescrever cada commit entre HEAD e o commit defeituoso, então você deve escolher seu comando msg-filter com muita sabedoria;
|
Eu prefiro assim:
git commit --amend -c 
Caso contrário, haverá um novo commit com um novo ID de commit.
|
Se você estiver usando a ferramenta Git GUI, há um botão chamado Amend last commit. Clique nesse botão e ele exibirá seus últimos arquivos e mensagens de commit. Apenas edite essa mensagem, e você pode confirmá-la com uma nova mensagem de confirmação.
Ou use este comando de um console / terminal:
git commit -a --amend -m "Minha nova mensagem de commit"
|
Você pode usar o rebase do Git. Por exemplo, se você deseja modificar de volta para confirmar bbc643cd, execute
$ git rebase bbc643cd ^ --interactive
No editor padrão, modifique 'pick' para 'edit' na linha cujo commit você deseja modificar. Faça suas alterações e depois as organize com
$ git add 
Agora você pode usar
$ git commit --amend
para modificar o commit, e depois disso
$ git rebase --continue
para voltar ao commit principal anterior.
|
Se você deseja apenas modificar sua última mensagem de confirmação, faça:
git commit --amend
Isso o deixará em seu editor de texto e permitirá que você altere a última mensagem de confirmação.
Se você quiser alterar as últimas três mensagens de confirmação, ou qualquer uma das mensagens de confirmação até aquele ponto, forneça HEAD ~ 3 para o comando git rebase -i:
git rebase -i HEAD ~ 3
|
Se você tiver que alterar uma mensagem de commit antiga em vários branches (ou seja, o commit com a mensagem errada está presente em vários branches), você pode querer usar:
git filter-branch -f --msg-filter \
'sed "s /  /  / g"' - - todos
Git criará um diretório temporário para reescrever e, adicionalmente, fazer backup de referências antigas em refs / original /.
-f irá forçar a execução da operação. Isso é necessário se o diretório temporário já estiver presente ou se já houver referências armazenadas em refs / original. Se esse não for o caso, você pode descartar este sinalizador.
- separa as opções de filtro-ramo das opções de revisão.
--all garantirá que todos os branches e tags sejam reescritos.
Devido ao backup de suas referências antigas, você pode facilmente voltar ao estado anterior à execução do comando.
Digamos, você deseja recuperar seu mestre e acessá-lo no branch old_master:
git checkout -b old_master refs / original / refs / heads / master
|
Usar
git commit --amend
Para entender em detalhes, uma excelente postagem é 4. Reescrevendo o histórico do Git. Ele também fala sobre quando não usar git commit --amend.
|
Se for seu último commit, apenas altere o commit:
git commit --amend -o -m "Nova mensagem de commit"
(Usando a sinalização -o (--only) para certificar-se de alterar apenas a mensagem de confirmação)
Se for um commit enterrado, use o incrível rebase interativo:
git rebase -i @ ~ 9 # Mostra os últimos 9 commits em um editor de texto
Encontre o commit que você deseja, altere pick para r (reformular), salve e feche o arquivo. Feito!
Tutorial do Vim em miniatura (ou como rebase com apenas 8 pressionamentos de tecla 3jcwrEscZZ):
Execute o vimtutor se você tiver tempo
hjkl corresponde às teclas de movimento ← ↓ ↑ →
Todos os comandos podem ser prefixados com um "intervalo", por exemplo 3j move três linhas para baixo
i para entrar no modo de inserção - o texto que você digita aparecerá no arquivo
Esc ou Ctrlc para sair do modo de inserção e retornar ao modo "normal"
você para desfazer
Ctrlr para refazer
dd, dw, dl para excluir uma linha, palavra ou letra, respectivamente
cc, cw, cl para alterar uma linha, palavra ou letra, respectivamente (igual a ddi)
yy, yw, yl para copiar ("yank") uma linha, palavra ou letra, respectivamente
p ou P para colar depois ou antes da posição atual, respectivamente
: wEnter para salvar (gravar) um arquivo
: q! Entre para sair sem salvar
: wqEnter ou ZZ para salvar e sair
Se você editar muito texto, mude para o layout de teclado Dvorak, aprenda a digitar e aprenda Vim. Vale a pena o esforço? Sim.
ProTip ™: Não tenha medo de experimentar comandos "perigosos" que reescrevem o histórico * - Git não deleta seus commits por 90 dias por padrão; você pode encontrá-los no reflog:
$ git reset @ ~ 3 # Volte três commits
$ git reflog
c4f708b HEAD @ {0}: redefinir: mover para @ ~ 3
2c52489 HEAD @ {1}: commit: mais mudanças
4a5246d HEAD @ {2}: commit: faça alterações importantes
e8571e4 HEAD @ {3}: commit: faça algumas alterações
... commits anteriores ...
$ git reset 2c52489
... e você está de volta onde você começou
* Cuidado com as opções --hard e --force - elas podem descartar dados.
* Além disso, não reescreva o histórico em nenhum branch em que esteja colaborando.
|
Emendar
Você tem algunsopções aqui. Você pode fazer
git commit --amend
contanto que seja seu último commit.
Rebase interativo
Caso contrário, se não for seu último commit, você pode fazer um rebase interativo,
git rebase -i [branched_from] [hash antes do commit]
Então, dentro do rebase interativo, você simplesmente adiciona a edição a esse commit. Quando surgir, faça um git commit --amend e modifique a mensagem de commit. Se você quiser reverter antes desse ponto de confirmação, você também pode usar git reflog e apenas deletar esse commit. Então você apenas faz um commit do git novamente.
|
Se você estiver usando a GUI Git, você pode corrigir o último commit que não foi enviado com:
Confirmar / Alterar Última Confirmação
|
Eu uso a GUI Git tanto quanto posso, e isso dá a você a opção de alterar o último commit:
Além disso, git rebase -i origin / master é um mantra legal que sempre apresentará os commits que você fez em cima do master e lhe dará a opção de alterar, excluir, reordenar ou squash. Não há necessidade de obter esse hash primeiro.
|
Uau, há muitas maneiras de fazer isso.
Outra maneira de fazer isso é deletar o último commit, mas manter suas alterações para que você não perca seu trabalho. Você pode então fazer outro commit com a mensagem corrigida. Seria mais ou menos assim:
git reset --soft HEAD ~ 1
git commit -m 'Mensagem de confirmação nova e corrigida'
Sempre faço isso quando me esqueço de adicionar um arquivo ou de fazer alguma alteração.
Lembre-se de especificar --soft ao invés de --hard, caso contrário você perderá aquele commit inteiramente.
|
Para quem procura uma interface Windows / Mac para ajudar na edição de mensagens mais antigas (ou seja, não apenas a mensagem mais recente), eu recomendo Sourcetree. Os passos a seguir estão abaixo da imagem.
Para commits que ainda não foram enviados para um controle remoto:
Certifique-se de ter confirmado ou armazenado todas as alterações atuais (ou seja, para que não haja arquivos listados na guia "Status do arquivo") - caso contrário, não funcionará.
Na guia "Log / Histórico", clique com o botão direito na entrada com uma linha adjacente no gráfico abaixo do (s) commit (s) que deseja editar e selecione "Rebase filhos de  interativamente ..."
Selecione toda a linha para uma mensagem de confirmação que deseja alterar (clique na coluna "Mensagem").
Clique no botão "Editar mensagem".
Edite a mensagem conforme desejado na caixa de diálogo que aparece e clique em OK.
Repita as etapas 3 a 4 se houver outras mensagens de confirmação a serem alteradas.
Clique em OK: o rebasing começará. Se tudo estiver bem, a saída terminará com "Concluído com sucesso". OBSERVAÇÃO: às vezes, vejo isso falhar com Não é possível criar 'project_path / .git / index.lock': Arquivo existe. ao tentar modificar várias mensagens de confirmação ao mesmo tempo. Não tenho certeza de qual é o problema ou se será corrigido em uma versão futura do Sourcetree, mas se isso acontecer, recomendo rebasear um por vez (mais lento, mas parece mais confiável).
... Ou ... para commits que já foram enviados:
Siga as etapas nesta resposta, que são semelhantes às anteriores, mas requerem que um comando adicional seja executado na linha de comando (git push origin  -f) para forçar o push do branch. Recomendo a leitura de tudo e os cuidados necessários!
|
Se você deseja apenas editar o último commit, use:
git commit --amend
ou
git commit --amend -m 'mensagem de uma linha'
Mas se você quiser editar vários commits em uma linha, você deve usar rebasing ao invés:
git rebase -i 
Em um arquivo, como o acima, escreva edit / e ou uma das outras opções, e clique em salvar e sair.
Agora você estará no primeiro commit errado. Faça alterações nos arquivos e eles serão testados automaticamente para você. Tipo
git commit --amend
Salve, saia e digite
git rebase --continue
para mover para a próxima seleção até terminar todas as suas seleções.
Observe que essas coisas mudam todos os seus hashes SHA após aquele commit em particular.
|
Se você deseja apenas alterar sua última mensagem, você deve usar o sinalizador --only ou seu atalho -o com commit --amend:
git commit --amend -o -m "Nova mensagem de commit"
Isso garante que você não acidentalmente aprimore seu commit com coisas encenadas. Claro que é melhor ter uma configuração $ EDITOR adequada. Então você pode deixar a opção -m de fora, e o Git irá pré-preencher a mensagem de commit com a antiga. Desta forma, pode ser editado facilmente.
|
Atualize sua última mensagem de confirmação errada com a nova mensagem de confirmação em uma linha:
git commit --amend -m "sua nova mensagem de commit"
Ou tente redefinir Git como abaixo:
# Você pode redefinir sua cabeça para n número de commit
# NÃO é uma boa ideia para alterar a última mensagem de confirmação,
# mas você pode ter uma ideia para dividir o commit em vários commits
git reset --soft HEAD ^
# Irá reiniciar o seu último commit. Agora você
# pode confirmá-lo novamente com uma nova mensagem de confirmação.
Usando reset para dividir commits em commits menores
git reset pode ajudá-lo a quebrar um commit em vários commits:
# Reinicie sua cabeça. Estou redefinindo para os últimos commits:
git reset --soft HEAD ^
# (Você pode redefinir vários commits fazendo HEAD ~ 2 (no. De commits)
# Agora, reinicie sua cabeça paradividindo em vários commits
git reset HEAD
# Adicione e envie seus arquivos separadamente para fazer vários commits: por exemplo
git add app /
git commit -m "adicionar todos os arquivos no diretório do aplicativo"
git add config /
git commit -m "adicionar todos os arquivos no diretório de configuração"
Aqui você quebrou com sucesso seu último commit em dois commits.
|
Sobre esta questão há muitas respostas, mas nenhuma delas explica em detalhes como alterar mensagens de commit mais antigas usando o Vim. Eu estava preso tentando fazer isso sozinho, então aqui vou escrever em detalhes como fiz isso, especialmente para pessoas que não têm experiência no Vim!
Eu queria mudar meus cinco últimos commits que já enviei para o servidor. Isso é muito 'perigoso' porque se alguém já fez o pull dele, você pode bagunçar as coisas alterando as mensagens de commit. No entanto, quando você está trabalhando em seu próprio galho e tem certeza de que ninguém o puxou, você pode alterá-lo assim:
Digamos que você queira alterar seus cinco últimos commits e, em seguida, digite isto no terminal:
git rebase -i HEAD ~ 5
* Onde 5 é o número de mensagens de commit que você deseja alterar (então, se você quiser alterar do 10º para o último commit, digite 10).
Este comando levará você ao Vim, onde poderá ‘editar’ seu histórico de commits. Você verá seus últimos cinco commits no topo, assim:
escolha  mensagem de commit
Em vez de escolher, você precisa escrever uma reformulação. Você pode fazer isso no Vim digitando i. Isso faz com que você entre no modo de inserção. (Você vê que está no modo de inserção com a palavra INSERT na parte inferior.) Para os commits que deseja alterar, digite reformulação em vez de pick
Então você precisa salvar e sair desta tela. Você faz isso indo primeiro para o ‘modo de comando’ pressionando o botão Esc (você pode verificar se está no modo de comando se a palavra INSERT na parte inferior tiver desaparecido). Em seguida, você pode digitar um comando digitando:. O comando para salvar e sair é wq. Então, se você digitar: wq, você está no caminho certo.
Então o Vim revisará cada mensagem de commit que você deseja reescrever, e aqui você pode realmente mudar as mensagens de commit. Você fará isso entrando no modo de inserção, alterando a mensagem de confirmação, entrando no modo de comando, salvando e fechando. Faça isso cinco vezes e você estará fora do Vim!
Então, se você já enviou seus commits errados, você precisa executar push --force para sobrescrevê-los. Lembre-se de que git push --force é uma coisa muito perigosa de se fazer, então certifique-se de que ninguém fez pull do servidor desde que você enviou seus commits errados!
Agora você mudou suas mensagens de commit!
(Como você pode ver, não tenho tanta experiência no Vim, então se eu usei a 'linguagem' errada para explicar o que está acontecendo, sinta-se à vontade para me corrigir!)
|
Você pode usar git-rebase-reword
Ele é projetado para editar qualquer commit (não apenas o último) da mesma forma que commit --amend
$ git rebase-reword 
É nomeado após a ação no rebase interativo para alterar um commit: "reword". Veja esta postagem e o modo interativo man -section-
Exemplos:
$ git rebase-reword b68f560
$ git rebase-reword HEAD ^
|
Eu adicionei os aliases reci e recm para recommiti-lo (alterá-lo). Agora posso fazer isso com git recm ou git recm -m:
$ vim ~ / .gitconfig
[alias]
......
cm = commit
reci = commit --amend
recm = commit --amend
......
|
Percebi que havia enviado um commit com um erro de digitação. Para desfazer, fiz o seguinte:
git commit --amend -m "T-1000, protótipo avançado"
git push --force
Aviso: forçar o envio de suas alterações irá sobrescrever o branch remoto pelo local. Certifique-se de não sobrescrever nada que deseja manter. Também seja cauteloso ao forçar o envio de um commit alterado (reescrito) se alguém mais compartilhar o branch com você, porque eles precisarão reescrever sua própria história se eles tiverem a cópia antiga do commit que você acabou de reescrever.
|
Eu gosto de usar o seguinte:
git status
git add --all
git commit -am "mensagem aqui sobre a mudança"
git pull 
git push 
|
Se você não enviou o código para o seu branch remoto (GitHub / Bitbucket), você pode alterar a mensagem de confirmação na linha de comando conforme abaixo.
git commit --amend -m "Sua nova mensagem"
Se você estiver trabalhando em um branch específico, faça o seguinte:
git commit --amend -m "NOME DA FILIAL: nova mensagem"
Se você já enviou o código com a mensagem errada e precisa ter cuidado ao alterar a mensagem. Ou seja, depois de alterar a mensagem de confirmação e tentar enviá-la novamente, você acaba tendo problemas. Para facilitar, siga estas etapas.
Por favor, leia minha resposta inteira antes de fazer isso.
git commit --amend -m "NOME DA FILIAL: sua nova mensagem"
git push -f origin BRANCH-NAME # Não é uma prática recomendada. Leia abaixo por quê?
Observação importante: quando você usa o force push diretamente, pode acabar com problemas de código que outros desenvolvedores estão trabalhando no mesmo branch. Então, para evitar esses conflitos, você precisa puxar o código de seu branch antes de fazer o forceempurrar:
git commit --amend -m "NOME DA FILIAL: sua nova mensagem"
origem do git pull BRANCH-NAME
git push -f origin BRANCH-NAME
Esta é a melhor prática ao alterar a mensagem de confirmação, se ela já tiver sido enviada.
|
Não é a resposta que você está procurando? Navegue por outras questões com a tag git git-commit git-rewrite-history alteração ou faça sua própria pergunta.